import { Lunar } from "lunar-javascript";
  const 男 = [
    "丙寅",
    "丁卯",
    "戊辰",
    "己巳",
    "庚午",
    "辛未",
    "壬申",
    "癸酉",
    "甲戌",
    "乙亥",
    "丙子",
    "丁丑",
    "戊寅",
    "己卯",
    "庚辰",
    "辛巳",
    "壬午",
    "癸未",
    "甲申",
    "乙酉",
    "丙戌",
    "丁亥",
    "戊子",
    "己丑",
    "庚寅",
    "辛卯",
    "壬辰",
    "癸巳",
    "甲午",
    "乙未",
    "丙申",
    "丁酉",
    "戊戌",
    "己亥",
    "庚子",
    "辛丑",
    "壬寅",
    "癸卯",
    "甲辰",
    "乙巳",
    "丙午",
    "丁未",
    "戊申",
    "己酉",
    "庚戌",
    "辛亥",
    "壬子",
    "癸丑",
    "甲寅",
    "乙卯",
    "丙辰",
    "丁巳",
    "戊午",
    "己未",
    "庚申",
    "辛酉",
    "壬戌",
    "癸亥",
    "甲子",
    "乙丑",
    "丙寅",
    "丁卯",
    "戊辰",
    "己巳",
    "庚午",
    "辛未",
    "壬申",
    "癸酉",
    "甲戌",
    "乙亥",
    "丙子",
    "丁丑",
    "戊寅",
    "己卯",
    "庚辰",
    "辛巳",
    "壬午",
    "癸未",
    "甲申",
    "乙酉",
    "丙戌",
    "丁亥",
    "戊子",
    "己丑",
    "庚寅",
    "辛卯",
    "壬辰",
    "癸巳",
    "甲午",
    "乙未",
    "丙申",
    "丁酉",
    "戊戌",
    "己亥",
    "庚子",
    "辛丑",
    "壬寅",
    "癸卯",
    "甲辰",
    "乙巳",
    "丙午",
    "丁未",
    "戊申",
    "己酉",
    "庚戌",
    "辛亥",
    "壬子",
    "癸丑",
    "甲寅",
    "乙卯",
    "丙辰",
    "丁巳",
    "戊午",
    "己未",
    "庚申",
    "辛酉",
    "壬戌",
    "癸亥",
    "甲子",
    "乙丑",
    "丙寅",
    "丁卯",
    "戊辰",
    "己巳",
    "庚午",
    "辛未",
    "壬申",
    "癸酉",
    "甲戌",
    "乙亥",
    "丙子",
    "丁丑",
    "戊寅",
    "己卯",
    "庚辰",
    "辛巳",
    "壬午",
    "癸未",
    "甲申",
    "乙酉",
    "丙戌",
    "丁亥",
    "戊子",
    "己丑",
    "庚寅",
    "辛卯",
    "壬辰",
    "癸巳",
    "甲午",
    "乙未",
    "丙申",
    "丁酉",
    "戊戌",
    "己亥",
    "庚子",
    "辛丑",
    "壬寅",
    "癸卯",
    "甲辰",
    "乙巳",
    "丙午",
    "丁未",
    "戊申",
    "己酉",
    "庚戌",
    "辛亥",
    "壬子",
    "癸丑",
    "甲寅",
    "乙卯",
    "丙辰",
    "丁巳",
    "戊午",
    "己未",
    "庚申",
    "辛酉",
    "壬戌",
    "癸亥",
    "甲子",
    "乙丑",
  ];
  const 女 = [
    "壬申",
    "辛未",
    "庚午",
    "己巳",
    "戊辰",
    "丁卯",
    "丙寅",
    "乙丑",
    "甲子",
    "癸亥",
    "壬戌",
    "辛酉",
    "庚申",
    "己未",
    "戊午",
    "丁巳",
    "丙辰",
    "乙卯",
    "甲寅",
    "癸丑",
    "壬子",
    "辛亥",
    "庚戌",
    "己酉",
    "戊申",
    "丁未",
    "丙午",
    "乙巳",
    "甲辰",
    "癸卯",
    "壬寅",
    "辛丑",
    "庚子",
    "己亥",
    "戊戌",
    "丁酉",
    "丙申",
    "乙未",
    "甲午",
    "癸巳",
    "壬辰",
    "辛卯",
    "庚寅",
    "己丑",
    "戊子",
    "丁亥",
    "丙戌",
    "乙酉",
    "甲申",
    "癸未",
    "壬午",
    "辛巳",
    "庚辰",
    "己卯",
    "戊寅",
    "丁丑",
    "丙子",
    "乙亥",
    "甲戌",
    "癸酉",
    "壬申",
    "辛未",
    "庚午",
    "己巳",
    "戊辰",
    "丁卯",
    "丙寅",
    "乙丑",
    "甲子",
    "癸亥",
    "壬戌",
    "辛酉",
    "庚申",
    "己未",
    "戊午",
    "丁巳",
    "丙辰",
    "乙卯",
    "甲寅",
    "癸丑",
    "壬子",
    "辛亥",
    "庚戌",
    "己酉",
    "戊申",
    "丁未",
    "丙午",
    "乙巳",
    "甲辰",
    "癸卯",
    "壬寅",
    "辛丑",
    "庚子",
    "己亥",
    "戊戌",
    "丁酉",
    "丙申",
    "乙未",
    "甲午",
    "癸巳",
    "壬辰",
    "辛卯",
    "庚寅",
    "己丑",
    "戊子",
    "丁亥",
    "丙戌",
    "乙酉",
    "甲申",
    "癸未",
    "壬午",
    "辛巳",
    "庚辰",
    "己卯",
    "戊寅",
    "丁丑",
    "丙子",
    "乙亥",
    "甲戌",
    "癸酉",
    "壬申",
    "辛未",
    "庚午",
    "己巳",
    "戊辰",
    "丁卯",
    "丙寅",
    "乙丑",
    "甲子",
    "癸亥",
    "壬戌",
    "辛酉",
    "庚申",
    "己未",
    "戊午",
    "丁巳",
    "丙辰",
    "乙卯",
    "甲寅",
    "癸丑",
    "壬子",
    "辛亥",
    "庚戌",
    "己酉",
    "戊申",
    "丁未",
    "丙午",
    "乙巳",
    "甲辰",
    "癸卯",
    "壬寅",
    "辛丑",
    "庚子",
    "己亥",
    "戊戌",
    "丁酉",
    "丙申",
    "乙未",
    "甲午",
    "癸巳",
    "壬辰",
    "辛卯",
    "庚寅",
    "己丑",
    "戊子",
    "丁亥",
    "丙戌",
    "乙酉",
    "甲申",
    "癸未",
    "壬午",
    "辛巳",
    "庚辰",
    "己卯",
    "戊寅",
    "丁丑",
    "丙子",
    "乙亥",
    "甲戌",
    "癸酉",
  ];
function calculateAgeRanges(birthYear, birthMonth, birthDay,gender) {
  // 验证输入日期有效性
  const ageRanges = [];
    let lunardate = Lunar.fromYmd(birthYear, birthMonth, birthDay);
    let benMing = lunardate.getYearInGanZhiExact();
    // 计算0-120岁的日期范围
    let index = 0;
     let xn = "";
  for (let age = 1; age <= 120; age++) {
    // 计算该年龄的起始日期（出生日或生日当天）    
   
     
      // 格式化日期为{year, month, day}结构
      if (gender === '男') {
        xn = 男[index];
        
      } else {
          xn = 女[index];
         
      }
      index++;
      if(index == 69){
        index = 0;
      }
    ageRanges.push({
      age,
      start: {
        year: birthYear,
        month: birthMonth,
        day: birthDay,
      },
      end: {
        year: birthYear=birthYear+1,
        month: birthMonth,
        day: birthDay,
        },
      xingNian:xn
    });
  }

    return {
      benMing: benMing,
      ageRanges: ageRanges,
  };
}
function calculateBenmingXingnian(birthYear, birthMonth, birthDay, gender, targetDate) {
  // 计算本命
  const lunarBirthDate = Lunar.fromYmd(birthYear, birthMonth, birthDay);
  const benMing = lunarBirthDate.getYearInGanZhiExact();
  
  // 解析目标日期
  const targetYear = targetDate.getFullYear();
  const targetMonth = targetDate.getMonth() + 1; // 转换为1-based
  const targetDay = targetDate.getDate();
  
  // 大六壬虚岁计算：出生即为1岁
  let age = targetYear - birthYear + 1;
  
  // 如果目标日期尚未过当年生日，则虚岁减1
  if (targetMonth < birthMonth || (targetMonth === birthMonth && targetDay < birthDay)) {
    age--;
  }
  
  // 确保年龄不小于1岁（出生当天即为1岁）
  if (age < 1) age = 1;
  
  // 根据性别和虚岁计算行年（行年序列以0为起始索引，需减1）
  const xingNianList = gender === '男' ? 男 : 女;
  const index = (age - 1) % 60; // 行年从1岁开始对应索引0
  const xingNian = xingNianList[index];
  
  return {
    benMing: benMing,      // 本命
    age: age,              // 虚岁年龄
    xingNian: xingNian     // 行年
  };
}

// 示例验证（符合大六壬虚岁规则）
const birthDate = {year: 2025, month: 3, day: 3};

// 案例1：出生当天（2025-03-03）
const date1 = new Date(2025, 2, 3); // 月份是0-based，3月对应2
console.log(calculateBenmingXingnian(
  birthDate.year, birthDate.month, birthDate.day, '男', date1
)); 
// 输出：{benMing: "...", age: 1, xingNian: "丙寅"}（出生当天为1岁）

// 案例2：未过第一个生日（2026-03-02）
const date2 = new Date(2026, 2, 2);
console.log(calculateBenmingXingnian(
  birthDate.year, birthDate.month, birthDate.day, '男', date2
)); 
// 输出：{benMing: "...", age: 1, xingNian: "丙寅"}（仍为1岁）

// 案例3：过第一个生日（2026-03-03）
const date3 = new Date(2026, 2, 3);
console.log(calculateBenmingXingnian(
  birthDate.year, birthDate.month, birthDate.day, '男', date3
)); 
// 输出：{benMing: "...", age: 2, xingNian: "丁卯"}（满1岁后为2岁）


export { calculateAgeRanges ,calculateBenmingXingnian};